﻿/*************************************************************************************

- CLR版本：        4.0.30319.42000
- 类 名 称：       MesHelperSharp
- 机器名称：       YTE
- 命名空间：       LD.Tool.MES.sharp
- 文 件 名：       MesHelperSharp
- 创建时间：       2022/7/31 19:45:25
- 作    者：       YTE
- 说   明：
- 修改时间：
- 修 改 人：
  *************************************************************************************/

using LD.Host;
using LD.PLC;
using LdCommunication;
using System;

namespace LD.Tool
{
    [Tool(Text = "点位写入(动态值)", FrmParam = "ToolPlcWriteByKeyFrm", ToolType = ToolEnum.PLC)]

    public class ToolPlcWriteByKey : BaseTool
    {
        public override OpResult Execute(TB_Tool model)
        {
            try
            {
                stopwatch.Start();
                if (model.Param != null)
                {
                    var param = Newtonsoft.Json.JsonConvert.DeserializeObject<PLCWriteParam>(model.Param);

                    if (param != null && !string.IsNullOrEmpty(param.Address))
                    {
                        var opResult = new OperateResult();
                        switch (param.DataType)
                        {
                            case "Int16":
                                opResult = PLCFactory.Instance.Write(param.Address, (short)Cache.GetVar(param.Value));
                                break;
                            case "String":
                                string str = param.Value;
                                opResult = PLCFactory.Instance.Write(param.Address, Cache.GetVar<string>(str));
                                break;
                            default:
                                break;
                        }
                        if (opResult.IsSuccess)
                        {
                            isSuccess = true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log(model, ex.Message, LogLevel.严重);
            }
            finally
            {
                stopwatch.Stop();
            }
            return new OpResult() { IsSuccess = isSuccess, Message = message, ExecuteTime = stopwatch.ElapsedMilliseconds };
        }
    }
}
